class SyncBailHook { // 钩子 是同步的

  constructor(args) { // args => ['name']
    this.tasks = [];

  }

  tap(name, task) {// 事件名字 事件方法
    this.tasks.push(task);
  }

  call(...args) {
    let ret; // 当前这个函数的返回值
    let index = 0; // 当前执行到第几个
    do {
      ret = this.tasks[index++](...args);
    } while (ret === undefined && index < this.tasks.length);
  }

}

let hook = new SyncBailHook(['name']);
hook.tap('react', function (name) {
  console.log('react', name);
  return '停止向下执行';
  // return undefined;
});

hook.tap('vue', function (name) {
  console.log('vue', name);
});

hook.call('gzw');
